/*
* Copyright (C) Microsoft. All rights reserved.  
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not 
* use this file except in compliance with the License.  You may obtain a copy 
* of the License at http://www.apache.org/licenses/LICENSE-2.0  
* 
* THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED 
* WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, 
* MERCHANTABLITY OR NON-INFRINGEMENT. 
*
* See the Apache License, Version 2.0 for specific language governing 
* permissions and limitations under the License.
*
*/
#pragma once

#include <baja/common.hpp>
#include <baja/graphics.hpp>

#include <baja/graphics/scenes/scenes_fwd.hpp>
#include <baja/graphics/scenes/scenes_interfaces.hpp>
#include <baja/graphics/scenes/details/scene_node_base.hpp>

namespace baja { namespace graphics { namespace scenes {

namespace d = ::baja::graphics::scenes::details;

class scene_node : public d::scene_node_base<iscene_node>
{
public:
    scene_node() {}

    static std::shared_ptr<scene_node> create()
    {
        return std::make_shared<scene_node>();
    }

    virtual ~scene_node() {}

    virtual void renderInternal(const std::shared_ptr<iengine>& graphics, const m::matrix44* localToWorld)
    {
        // nothing to render...
    }
};

inline std::shared_ptr<iscene_node> createSceneNode()
{
    std::shared_ptr<scene_node> returnValue = scene_node::create();

    return std::dynamic_pointer_cast<iscene_node>(returnValue);
}

}}} // namespace baja::graphics::scenes